package com.feige.base.po;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.feige.base.dto.BaseDto;
import com.feige.base.vo.BaseVo;
import org.springframework.data.domain.Persistable;

import javax.persistence.Transient;
import java.io.Serializable;
import java.util.Date;

/**
 * @author feige
 */
public interface IPersistence extends Serializable, Persistable<Long>, BaseVo, BaseDto<IPersistence> {
    /**
     * 设置ID
     * @param id ID
     */
    void setId(Long id);

    /**
     * 获取ID
     * @return ID
     */
    @Override
    Long getId();

    /**
     * 获取创建时间
     * @return
     */
    Date getGmtCreated();

    /**
     * 设置创建时间
     * @param date 时间
     */
    void setGmtCreated(Date date);

    /**
     * 获取更新时间
     * @return
     */
    Date getGmtModified();

    /**
     * 设置更新时间
     * @param date 时间
     */
    void setGmtModified(Date date);

    /**
     * 是否新对象
     * @return
     */
    @Override
    @Transient
    @JsonIgnore
    default boolean isNew() {
        return null == this.getId();
    }

    /**
     * 转换为dto
     * @return
     */
    default BaseDto<IPersistence> toDto(){
        return this;
    }


    /**
     * 转换为vo
     * @return
     */
    default BaseVo toVo() {
        return this;
    }


}
